CXX := x86_64-w64-mingw32-g++
WINDRES := x86_64-w64-mingw32-windres
CXXFLAGS := -std=c++17 -O2 -Wall -Wextra -Wpedantic -Wno-missing-field-initializers -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0A00
LDLIBS := -ld3d11 -ldxgi -ldxguid -lmfplat -lmfreadwrite -lmfuuid -lole32 -lshell32 -luuid -luser32 -lgdi32 -ldwmapi -ladvapi32
.PHONY: all test windows-test clean
all: build/BabatolHomeClip.exe
build:
	mkdir -p build
build/app.res: app.rc app.manifest assets/babatol.ico | build
	$(WINDRES) app.rc -O coff -o $@
build/BabatolHomeClip.exe: src/main.cpp src/settings.cpp src/recorder.cpp src/storage.cpp src/clipboard.cpp src/overlay.cpp src/*.hpp build/app.res
	$(CXX) $(CXXFLAGS) src/main.cpp src/settings.cpp src/recorder.cpp src/storage.cpp src/clipboard.cpp src/overlay.cpp build/app.res -o $@ -municode -mwindows -static -static-libgcc -static-libstdc++ -Wl,--no-insert-timestamp $(LDLIBS)
	x86_64-w64-mingw32-strip $@
test: | build
	g++ -std=c++17 -O1 -g -Wall -Wextra -Werror -fsanitize=address,undefined tests/core_test.cpp -o build/core_test
	./build/core_test
	g++ -std=c++17 -O1 -g -Wall -Wextra -Werror -fsanitize=address,undefined tests/settings_test.cpp -o build/settings_test
	./build/settings_test
windows-test: build/app.res | build
	$(CXX) $(CXXFLAGS) tests/windows_storage_test.cpp src/storage.cpp src/clipboard.cpp -o build/windows_storage_test.exe -municode -static -lole32 -lshell32 -luuid -luser32
	$(CXX) $(CXXFLAGS) tests/windows_settings_test.cpp src/settings.cpp -o build/windows_settings_test.exe -municode -static -ladvapi32 -luser32
	$(CXX) $(CXXFLAGS) tests/windows_dialog_test.cpp build/app.res -o build/windows_dialog_test.exe -municode -static -ladvapi32 -luser32
clean:
	rm -rf build
